﻿Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Imports System.Linq
Imports TNCDAL
Imports TNCBAL
Imports HTLibrary

Public Class ucPaymentVoucherNew
    Inherits System.Windows.Forms.UserControl
    Dim mPmV As New MPaymentVoucher
    Dim uti As New Utilities
    Dim _idPaymentV As Integer = 0
    Dim _id_filefee As Integer
    Dim _arrayFileFee As ArrayList
    Dim _price As Double
    Dim _isNew As Boolean = False
    Dim _isEdit As Boolean = False
    Dim _isFileFee As Boolean = False
    Dim mfile As New MFiles
    Dim _idFile As Integer
    Dim _idOneFile As Integer
    Dim newOnePayment As Boolean = False
    Dim _loadedData As Boolean = False
    Dim _isExport As Boolean
    Dim isApprove As Boolean = False
    Dim indexRow As Integer = 0
    Dim id_user_current As Integer = 0
    Dim is_load_ratio_gridDetail As Boolean = False
    Public Sub New(ByVal idFile As Integer, ByVal isExport As Boolean)
        InitializeComponent()
        DataGridViewHelper.DataGridView_InitEvent(grid)
        DataGridViewHelper.DataGridView_InitEvent(gridDetail)
        _idOneFile = idFile
        _isNew = True
        _isEdit = False
        _isExport = isExport
        newOnePayment = True
    End Sub
    Public Sub New(ByVal id_FileFee As Integer, ByVal price As Double)
        InitializeComponent()
        DataGridViewHelper.DataGridView_InitEvent(grid)
        DataGridViewHelper.DataGridView_InitEvent(gridDetail)
        _id_filefee = id_FileFee
        _price = price
    End Sub
    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()
        DataGridViewHelper.DataGridView_InitEvent(grid)
        DataGridViewHelper.DataGridView_InitEvent(gridDetail)
        ' Add any initialization after the InitializeComponent() call.

    End Sub
    Public Sub New(ByVal arrayFileFee As ArrayList, ByVal price As Double)
        InitializeComponent()
        DataGridViewHelper.DataGridView_InitEvent(grid)
        DataGridViewHelper.DataGridView_InitEvent(gridDetail)
        _arrayFileFee = arrayFileFee
        _price = price
        txtAmount.Text = price
    End Sub
    Private Sub BindingDataToGrid()
        Dim query = mPmV.GetVoucherList()
        Dim source As New BindingSource
        source.DataSource = query
        BindingNavigator1.BindingSource = source
        grid.DataSource = source

        grid.Columns(0).Visible = False
        grid.Columns(5).Visible = False
        grid.Columns(8).Visible = False
        grid.Columns(11).Visible = False
        'grid.Columns(10).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
        'grid.Columns(11).Visible = False
        EnableControls(False)

        'If _idPaymentV <> 0 Then
        '    'Nếu có tồn tại payment voucher rồi thì focus đến vị trí đó

        '    For index = 0 To grid.Rows.Count() - 1


        '        If CType(grid.Rows(index).Cells(0).Value, Integer) = _idPaymentV Then
        '            grid.Focus()
        '            grid.CurrentCell = grid(index, 0)
        '            Exit For
        '        End If


        '    Next

        'End If
        Try
            grid.CurrentCell.Selected = False
        Catch ex As Exception

        End Try

    End Sub
    Private Sub BindingDataToGridSearch(ByVal idFile As Integer)
        Dim query = mPmV.GetVoucherListSearch(idFile)
        Dim source As New BindingSource
        source.DataSource = query
        BindingNavigator1.BindingSource = source
        grid.DataSource = source

        grid.Columns(0).Visible = False
        grid.Columns(5).Visible = False
        grid.Columns(8).Visible = False
        grid.Columns(11).Visible = False
       
      

    End Sub
    Private Sub LoadImport()
        'Load danh sách file đã được chi rồi
        'uti.FillAllFileForPaymentComboTree(cbTreeFileCase, chkExport.Checked)
        'uti.FillAllFileForPaymentComboBox(cboFile, chkExport.Checked)
        Try
            uti.FillAllFileForPaymentTextbox(txtFile, chkExport.Checked)

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        'cbTreeFileCase.Enabled = True
        chkExport.Enabled = False
        'txtAmount.Enabled = False
        _isFileFee = True
        'Load advancevoucher
        uti.FillUserCombo(cbDirector, 4)

        datePayment.Value = DateTime.Now()

    End Sub
    Private Sub EnableControls(ByVal v As Boolean)

        datePayment.Enabled = v
        'txtPMVNo.Enabled = v

        txtCashier.Enabled = v
        txtDescription.Enabled = v


        txtReceiver.Enabled = v
        cbDirector.Enabled = v
        'cbTreeFileCase.Enabled = v
        txtFile.Enabled = v
        chkExport.Enabled = v
        'txtInvoiceNo.Enabled = v
        If _isNew Then
            txtID_PaymentVoucher.Text = 0
            datePayment.Value = DateTime.Now()
            'txtPMVNo.Text = ""

            txtCashier.Text = ""

            If newOnePayment Then
                txtDescription.Text = "Chi phí file " & mfile.getFileNoFile2(_idOneFile)

            Else
                'txtDescription.Text = "Chi phí file " & mfile.getFileNoFile2(cbTreeFileCase.SelectedValue)
                'txtAmount.Text = ""

            End If


            txtReceiver.Text = ""
            cbDirector.SelectedIndex = 0
            txtNguoiLapPhieu.Text = GeneralClassBAL._User.FullName
            '  txtInvoiceNo.Text = ""


        End If


    End Sub
    Private Sub frmPaymentVoucher_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        LoadImport()
        BindingDataToGrid()
        If newOnePayment Then
            AddNewOnePaymentVoucher()
            datePayment.Focus()
        Else

        End If

    End Sub

    Private Sub grid_RowEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid.RowEnter
        'Load vào các textbox

        If newOnePayment = False Then

            Dim rw As Integer = e.RowIndex
            Dim dg As DataGridView = CType(sender, DataGridView)
            txtID_PaymentVoucher.Text = dg.Item(0, rw).Value   'row.Item("id").ToString
            txtPMVNo.Text = dg.Item(1, rw).Value

            If dg.Item(2, rw).Value IsNot Nothing Then
                datePayment.Value = CType(dg.Item(2, rw).Value.ToString(), DateTime)
            End If
            txtReceiver.Text = dg.Item(3, rw).Value
            txtAmount.Text = dg.Item(4, rw).Value
            txtDescription.Text = dg.Item(10, rw).Value
            If dg.Item(5, rw).Value IsNot Nothing Then
                cbDirector.SelectedValue = CInt(dg.Item(5, rw).Value)
            End If
            txtCashier.Text = dg.Item(7, rw).Value
            If dg.Item(8, rw).Value IsNot Nothing Then
                id_user_current = dg.Item(8, rw).Value
            End If
            If dg.Item(9, rw).Value IsNot Nothing Then
                txtNguoiLapPhieu.Text = dg.Item(9, rw).Value
            End If

            'If dg.Item(12, rw).Value IsNot Nothing Then
            '    txtApproveUser.Text = dg.Item(12, rw).Value
            'End If
            'If dg.Item(13, rw).Value IsNot Nothing Then
            isApprove = CBool(dg.Item(13, rw).Value)
            'End If
            'Lấy thông tin file của paymentVoucher
            Try
                _idFile = mPmV.getFileOfPaymentVoucher(txtID_PaymentVoucher.Text)
                'Hiển thị fileNo ra ngoài textbox
                chkExport.Checked = mfile.getFileType(_idFile)
                txtFile.Text = mfile.getFileNoFile(_idFile)
                'Lấy tỉ giá
                txtTigia.Text = CDbl(mfile.GetRatioCurrency(_idFile))
                'cbTreeFileCase.SelectedValue = _idFile
                'Load thông tin danh sách phí vào bảng chi tiết
                Dim query = mPmV.GetListFee(_idFile)

                If query IsNot Nothing Then
                    gridDetail.DataSource = query
                    gridDetail.Columns(0).Visible = False
                    gridDetail.Columns(1).Visible = False
                    gridDetail.Columns(2).Visible = False
                    gridDetail.Columns(5).Visible = False
                    For index = 0 To gridDetail.RowCount - 1
                        'Lay tien te xem co phai la VND khong
                        Dim curr As Integer = gridDetail.Rows(index).Cells(5).Value

                        If curr <> 1 Then
                            'Neu khong phai tien viet
                            'lay ti gia
                            Dim mfex As New MFileExchange
                            gridDetail.Rows(index).Cells(7).Value = mfex.GetRatioCurrency(_idFile, curr)
                        End If

                    Next
                Else
                    gridDetail.DataSource = Nothing
                End If


            Catch ex As Exception
                _idFile = 0
                txtTigia.Text = ""
                gridDetail.DataSource = Nothing
            End Try
        End If


    End Sub
    Private Sub FormatGrid()
        Try
            grid.Columns(4).DefaultCellStyle.Format = "#,##0.#"
            grid.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            'grid.Columns(4).DefaultCellStyle.Format = "#,##0.#"
            'grid.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        Catch ex As Exception

        End Try

    End Sub
    Private Sub FormatGridDetail()
        Try
            gridDetail.Columns(4).DefaultCellStyle.Format = "#,##0.#"
            gridDetail.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            gridDetail.Columns(7).DefaultCellStyle.Format = "#,##0.#"
            gridDetail.Columns(7).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight

        Catch ex As Exception

        End Try

    End Sub

    Private Sub txtAmount_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAmount.TextChanged

        'If txtAmount.Text <> "" Then
        '    Dim chuoi As String() = txtAmount.Text.Split(New Char() {","})
        '    Dim chuoicanchuyen As String = ""
        '    For Each item As String In chuoi
        '        chuoicanchuyen += item
        '    Next
        '    Dim chuoi1 As String = XuLyChuoi.Doisosangchu(chuoicanchuyen).ToLower().Substring(0, 1)
        '    Dim chuoi2 As String = XuLyChuoi.Doisosangchu(chuoicanchuyen).ToLower().Substring(1)
        '    txtVietBangChu.Text = chuoi1.ToUpper() & chuoi2 + "đồng"
        '    'txtAmount.Text = XuLyChuoi.ThemDauPhayVaoChuoi(chuoicanchuyen)
        'End If

        
        uti.FormatCurr(txtAmount)

    End Sub


    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

        If BarDetail.AutoHide = True Then
            BarDetail.AutoHide = False
        End If

        _isNew = True
        _isEdit = False

        EnableControls(True)
        btnEdit.Enabled = False
        btncancel.Enabled = True
        btnSave.Enabled = True
        btnDelete.Enabled = False
        btnAdd.Enabled = False
        chkSearch.Enabled = False
        'Hiển thị panel
        'panelCase.Visible = True
        'radFileFee.Checked = False
        'radOrtherFee.Checked = False
        'gridDetail.DataSource = Nothing
        _idPaymentV = 0
        'Load danh sách file chưa được chi
        'uti.FillAllFileForPaymentComboTree(cbTreeFileCase, chkExport.Checked)
        'uti.FillAllFileForPaymentComboBox(cboFile, chkExport.Checked)
        'Lấy số tự động
        Dim pNo As Integer = mPmV.GetLastedPaymentNo()

        If pNo = 0 Then
            txtPMVNo.Text = 1 & "/PC"

        Else
            txtPMVNo.Text = pNo + 1 & "/PC"
        End If


        grid.Enabled = False
        datePayment.Focus()
    End Sub

    Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
        'Kiểm tra quyền người dùng, nếu đúng là người đó tạo ra mới được phép sửa

        If GeneralClassBAL._User.ID_User = id_user_current Then



            'Kiểm tra file đã approve chưa, nếu rồi thì k cho phép sửa

            If isApprove = True Then
                MessageBox.Show("Payment Voucher is approved. Don't allow edit")
                Return
            End If

            _isEdit = True
            _isNew = False
            EnableControls(True)
            'cbTreeFileCase.Enabled = False
            'cboFile.Enabled = False
            btnAdd.Enabled = False
            btnSave.Enabled = True
            btnEdit.Enabled = False
            btncancel.Enabled = True
            btnDelete.Enabled = False
            chkSearch.Enabled = False
            _idPaymentV = 0
            'Kiểm tra nếu là phí file thì enable text nhập số tiền

            If _idFile > 0 Then
                'txtAmount.Enabled = False
            Else
                'Nếu là phí khác thì disable
                'txtAmount.Enabled = False
            End If

            isApprove = False
            grid.Enabled = False
            Try
                indexRow = grid.CurrentRow.Index

            Catch ex As Exception

            End Try
            datePayment.Focus()
        Else
            MessageBox.Show("You have not the right to edit this payment voucher")
            Return
        End If
    End Sub

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
        'Kiểm tra phiếu chi hiện tại với file đó có tồn tại hay chưa
        'Nếu muốn thêm phải xóa phiếu chi cũ

        If _isNew Then
            _idFile = mfile.getIDFile(txtFile.Text, chkExport.Checked)
            If mPmV.ExistPaymentVoucher(_idFile) Then
                'True là có rồi thì thông báo
                Dim result As Integer = MessageBox.Show("Chọn Ok để tiếp tục (Xóa phiếu chi cũ, tạo phiếu chi mới)", "Thông báo", MessageBoxButtons.OKCancel)
                If result = DialogResult.Cancel Then
                    Return
                ElseIf result = DialogResult.OK Then
                    'Xóa phiếu chi cũ

                    If GeneralClassBAL._User.ID_User = id_user_current Then
                        'Kiểm tra file đã approve chưa, nếu rồi thì k cho phép xóa

                        If isApprove = True Then
                            MessageBox.Show("Payment Voucher is approved. Don't allow delete")
                            Return
                        End If

                        Try

                            'Xóa thông tin khóa ngoại trong bảng có liên quan

                            Dim mb As New MBuyingRate
                            Dim idf As Integer = mPmV.getIDPaymentVoucherOfFile(_idFile)
                            mb.DeleteRecordHasPayment(idf)
                            mPmV.DeleteRecord(idf)
                        Catch ex As Exception
                            MessageBox.Show("Không xóa được phiếu chi")
                            Return
                        End Try
                        isApprove = False
                    Else
                        MessageBox.Show("You have not the right to delete this payment voucher")
                        Return
                    End If
                End If
            End If

        End If

        If gridDetail.RowCount <= 0 Then
            'Không có phí nào
            MessageBox.Show("Chưa có danh sách phí giá mua của File")
            txtFile.Focus()
            'cbTreeFileCase.Focus()
            Return
        End If

        If txtPMVNo.Text = "" Then
            MessageBox.Show("Chưa nhập số phiếu chi")
            txtPMVNo.Focus()
            Return
        End If

        If txtReceiver.Text = "" Then
            MessageBox.Show("Chưa nhập tên người nhận")
            txtReceiver.Focus()
            Return
        End If

        If txtAmount.Text = "" Then
            MessageBox.Show("Chưa nhập số tiền")
            txtAmount.Focus()
            Return
        End If

        If CDbl(txtAmount.Text) = 0 Then
            MessageBox.Show("Kiểm tra lại phí buying của File. Phí chưa được tính")
            txtFile.Focus()
            'cbTreeFileCase.Focus()
            Return
        End If


        If txtDescription.Text = "" Then
            MessageBox.Show("Chưa nhập lý do chi")
            txtDescription.Focus()
            Return
        End If

        If _isNew Then
            Dim obj As New tblPaymentVoucher

            'If chkTU.Checked = True Then
            '    obj.ID_AdvanceVoucher = cbAdvanceVoucher.SelectedValue
            'End If

            obj.CreatedDate = datePayment.Value.ToShortDateString

            obj.PaymentVoucherNo = txtPMVNo.Text

            obj.Description = txtDescription.Text
            obj.Reciever = txtReceiver.Text
            obj.Amount = Double.Parse(txtAmount.Text.Replace(".", ""))
            obj.ID_Director = cbDirector.SelectedValue
            obj.Cashier = txtCashier.Text
            obj.ID_User = GeneralClassBAL._User.ID_User
            obj.IsApprove = False

            ' obj.InvoiceNo = txtInvoiceNo.Text
            mPmV.InsertNewRecord(obj)
            'Nếu thêm từ bên exportFile

            'Nếu lúc chọn phiếu chi cho phí thì chạy code này

            If _isFileFee Or newOnePayment Then
                'Sau khi thêm xong thì lấy giá trị idPayment mới để thêm vào file feee
                Dim id_PaymentVoucher As Integer = 0
                id_PaymentVoucher = mPmV.getIDNewPaymentVoucher()
                'update vào file fee
                'Duyệt qua bảng chi tiết phí file

                For index = 0 To gridDetail.Rows.Count - 1
                    Dim objff As New tblFileFee
                    objff.ID_FileFee = CInt(gridDetail.Rows(index).Cells(0).Value)
                    objff.ID_PaymentVoucher = id_PaymentVoucher
                    Dim mbr As New MBuyingRate
                    mbr.UpdatePaymentVoucher(objff)
                Next


            Else

            End If


        End If

        If _isEdit Then
            'Khi sửa thì chỉ cho sửa số tiền
            Dim obj As New tblPaymentVoucher
            obj.ID_PaymentVoucher = txtID_PaymentVoucher.Text

            'If chkTU.Checked = True Then
            '    obj.ID_AdvanceVoucher = cbAdvanceVoucher.SelectedValue
            'End If
            '  obj.ID_PaymentVoucher = cbAdvanceVoucher.SelectedValue
            obj.CreatedDate = datePayment.Value.ToShortDateString
            obj.PaymentVoucherNo = txtPMVNo.Text
            obj.Description = txtDescription.Text
            obj.Reciever = txtReceiver.Text
            obj.Amount = Double.Parse(txtAmount.Text.Replace(".", ""))
            obj.ID_Director = cbDirector.SelectedValue
            obj.Cashier = txtCashier.Text
            obj.ID_User = GeneralClassBAL._User.ID_User
            '   obj.InvoiceNo = txtInvoiceNo.Text
            mPmV.UpdateRecord(obj)

        End If

        btnAdd.Enabled = True
        btnEdit.Enabled = True
        btncancel.Enabled = False
        btnDelete.Enabled = True
        btnSave.Enabled = False
        chkSearch.Enabled = True
        _isNew = False
        _isEdit = False
        newOnePayment = False

        BindingDataToGrid()
        EnableControls(False)
        grid.Enabled = True
        grid.Rows(indexRow).Selected = True
        grid.FirstDisplayedScrollingRowIndex = indexRow
        grid.CurrentCell = grid(1, indexRow)
    End Sub


    Private Sub btPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btPrint.Click
        'lấy thông tin của phiếu chi hiện thời
        Dim id As Integer
        Try
            id = Integer.Parse(txtID_PaymentVoucher.Text)
        Catch ex As Exception
            id = 0
        End Try
        Dim pv As tblPaymentVoucher = mPmV.SelectRecordById(id)
        If (pv IsNot Nothing) Then
            Dim rpt As New rptPhieuChi
            'set các giá trị
            If (pv.CreatedDate.HasValue) Then
                Dim chuoiNgay As String = "Ngày " & pv.CreatedDate.Value.Day & " tháng " & pv.CreatedDate.Value.Month & " năm " & pv.CreatedDate.Value.Year
                rpt.SetParameterValue("NgayCT", chuoiNgay)
            Else
                rpt.SetParameterValue("NgayCT", "")
            End If
            rpt.SetParameterValue("SoPhieu", "Số phiếu: " & pv.PaymentVoucherNo)
            rpt.SetParameterValue("NguoiNhan", pv.Reciever)
            rpt.SetParameterValue("LyDo", pv.Description)
            rpt.SetParameterValue("SoTien", pv.Amount.Value.ToString("#,##0.##"))
            rpt.SetParameterValue("BangChu", CModule_Sy.NumToStringVietNam(pv.Amount))
            'chỗ này lấy ra chứng từ kèm theo, chính là invoice no trong file fee
            Dim sChungTu As String = ""
            Try
                For Each fee As tblFileFee In pv.tblFileFees
                    If (fee.InvoiceNo <> "") Then
                        sChungTu = sChungTu & fee.InvoiceNo & "; "
                    End If
                Next
                If sChungTu <> "" Then
                    sChungTu = sChungTu.Substring(0, sChungTu - 2)
                End If
            Catch ex As Exception
            End Try
            rpt.SetParameterValue("ChungTuKem", sChungTu)
            rpt.SetParameterValue("GiamDoc", pv.tblUser.FullName)
            rpt.SetParameterValue("NguoiLap", txtNguoiLapPhieu.Text)
            rpt.SetParameterValue("ThuQuy", txtCashier.Text)
            'hien thi
            Dim uc As New ucReportViewer(rpt)
            frmMain.AddNewDockContainerItem(pv.PaymentVoucherNo, pv.PaymentVoucherNo, uc)

        Else
            MessageBox.Show("Phiếu để in không hợp lệ!")
        End If
    End Sub

    

    Private Sub AddNewOnePaymentVoucher()
        'Lấy số phiếu tự động
        Dim pNo As Integer = mPmV.GetLastedPaymentNo()

        If pNo = 0 Then
            txtPMVNo.Text = 1 & "/PC"

        Else
            txtPMVNo.Text = pNo + 1 & "/PC"
        End If

        'Load File vào cb
        uti.FillUserCombo(cbDirector, 4)
        datePayment.Value = DateTime.Now()
        chkExport.Checked = _isExport

        'uti.FillAllFileForPaymentComboTree(cbTreeFileCase, chkExport.Checked)
        'uti.FillAllFileForPaymentComboBox(cboFile, chkExport.Checked)
        'cbTreeFileCase.SelectedValue = _idOneFile

        'Kiểm tra file đã chọn đã chi chưa

        Dim isPayment As Boolean = False
        Dim mbr As New MBuyingRate
        Try
            isPayment = mbr.IsPayment(_idOneFile)
        Catch ex As Exception
            newOnePayment = False
            BindingDataToGrid()
            'cbTreeFileCase.Enabled = True
            MessageBox.Show("File chưa có danh sách phí giá bán, chọn file khác")
            Return
        End Try
        If isPayment = True Then
            newOnePayment = False

            BindingDataToGrid()
            MessageBox.Show("File đã được thanh toán")
            Return
        End If
        _isNew = True
        _isEdit = False
        EnableControls(True)
        txtPMVNo.Focus()
        'cbTreeFileCase.Enabled = False
        btnEdit.Enabled = False
        btncancel.Enabled = True
        btnSave.Enabled = True
        btnDelete.Enabled = False
        btnAdd.Enabled = False

        'gridDetail.DataSource = Nothing
        _idPaymentV = 0
        txtTigia.Text = mfile.GetRatioCurrency(_idOneFile)

        If txtTigia.Text = "" Then
            MessageBox.Show("Nhập tỉ giá cho phiếu chi")
            Return
        End If


        'Load thông tin danh sách phí vào bảng chi tiết
        Dim query = mPmV.GetListFee2(_idOneFile)
        gridDetail.DataSource = query

        If gridDetail.RowCount > 0 Then
            Dim fileno As String = mfile.getFileNoFile2(_idOneFile)

            If chkExport.Checked = True Then
                txtDescription.Text = "Chi phí File " & fileno & "/EX"
            Else
                txtDescription.Text = "Chi phí File " & fileno & "/IM"


            End If

            txtReceiver.Focus()
            gridDetail.Columns(0).Visible = False
            gridDetail.Columns(1).Visible = False
            gridDetail.Columns(2).Visible = False
            gridDetail.Columns(5).Visible = False
            'gridDetail.Columns(6).Visible = False

        Else
            _isNew = False
            newOnePayment = False
            _isEdit = False

            BindingDataToGrid()
            MessageBox.Show("Chưa tính phí của file này, chọn lại file khác")

            Return
        End If
        txtReceiver.Focus()
    End Sub

    Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'Nếu chọn tính theo phí giá mua của file thì load chi tiết phí vào bảng chi tiết
        'Lấy thông tin tỉ giá của file cho vào tỉ giá


        'Kiểm tra file đã chọn đã chi chưa

        Dim isPayment As Boolean = False
        Dim mbr As New MBuyingRate
        Try
            'isPayment = mbr.IsPayment(cbTreeFileCase.SelectedValue)

        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Return
        End Try

        If isPayment = True Then
            'MessageBox.Show("File đã được thanh toán")
            Return
        End If

        'txtTigia.Text = mfile.GetRatioCurrency(cbTreeFileCase.SelectedValue)

        If txtTigia.Text = "" Then
            MessageBox.Show("Nhập tỉ giá cho phiếu chi")
            Return
        End If


        'Load thông tin danh sách phí vào bảng chi tiết
        'Dim query = mPmV.GetListFee2(cbTreeFileCase.SelectedValue)
        'gridDetail.DataSource = query

        'If gridDetail.RowCount > 0 Then
        '    Dim fileno As String = mfile.getFileNoFile2(cbTreeFileCase.SelectedValue)

        '    txtDescription.Text = "Chi phí File " & fileno

        '    txtPMVNo.Focus()
        '    gridDetail.Columns(0).Visible = False
        '    gridDetail.Columns(1).Visible = False
        '    gridDetail.Columns(2).Visible = False
        '    gridDetail.Columns(5).Visible = False
        '    ' gridDetail.Columns(6).Visible = False

        'Else

        '    MessageBox.Show("Chưa tính phí của file này, chọn lại file khác")
        '    Return
        'End If

    End Sub


    Private Sub btncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.Click
        _isNew = False
        _isEdit = False
        _isFileFee = False
        newOnePayment = False
        btnAdd.Enabled = True
        btnEdit.Enabled = True
        btnDelete.Enabled = True
        btnSave.Enabled = False
        btncancel.Enabled = False
        chkSearch.Enabled = True
        EnableControls(False)
        gridDetail.DataSource = Nothing
        LoadImport()
        BindingDataToGrid()

        If grid.RowCount <= 0 Then
            ResetField()
        End If
        grid.Enabled = True
    End Sub
    Private Sub ResetField()
        txtTigia.Text = ""
        txtAmount.Text = ""
        txtDescription.Text = ""

        txtPMVNo.Text = ""
        txtCashier.Text = ""
        txtReceiver.Text = ""
    End Sub
    Private Sub CalculateTotalBuying()
        If is_load_ratio_gridDetail Then

      
        Dim gridTinhTong As DevComponents.DotNetBar.Controls.DataGridViewX
        gridTinhTong = gridDetail
        'Luôn là giá tiền Việt cần phải đổi theo tỉ giá nằm trong file

        Dim total As Double = 0
        For i As Integer = 0 To gridTinhTong.Rows.Count
            Try

                Dim price As Double

                If CInt(gridTinhTong.Rows(i).Cells(5).Value) = 1 Then
                    'Tiền việt
                    price = Double.Parse(gridTinhTong.Rows(i).Cells(4).Value.ToString)
                    total += price
                Else

                    price = Double.Parse(gridTinhTong.Rows(i).Cells(4).Value.ToString) * Double.Parse(gridTinhTong.Rows(i).Cells(7).Value.ToString) 'CDbl(txtTigia.Text.Replace(".", ""))
                    total += price
                End If

            Catch ex As Exception

            End Try
        Next
            txtAmount.Text = total
        End If

    End Sub

    Private Sub gridDetail_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles gridDetail.CellEndEdit
        If (e.ColumnIndex = 4) And (_isNew Or _isEdit) Then
            'cập nhật lại tổng
            CalculateTotalBuying()
        End If
    End Sub

    Private Sub gridDetail_DataBindingComplete(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles gridDetail.DataBindingComplete
        If gridDetail.RowCount > 0 Then
            FormatGridDetail()
            is_load_ratio_gridDetail = True

        End If

        If (_isNew) Or newOnePayment Then
            'cập nhật lại tổng
            CalculateTotalBuying()
        End If



    End Sub


    Private Sub Filter(ByVal dateAdvance As DateTime)
        Dim query = mPmV.GetVoucherList(dateAdvance)
        Dim source As New BindingSource
        source.DataSource = query
        BindingNavigator1.BindingSource = source
        grid.DataSource = source

        grid.Columns(0).Visible = False
        grid.Columns(5).Visible = False
        grid.Columns(8).Visible = False
        grid.Columns(10).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
        'grid.Columns(11).Visible = False
        EnableControls(False)
    End Sub

    Private Sub btnBoLoc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        BindingDataToGrid()
    End Sub

    Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click

        If GeneralClassBAL._User.ID_User = id_user_current Then
            'Kiểm tra file đã approve chưa, nếu rồi thì k cho phép xóa

            If isApprove = True Then
                MessageBox.Show("Payment Voucher is approved. Don't allow delete")
                Return
            End If

            Try
                Dim result As Integer
                result = uti.ShowConfirm("Xác nhận", "Bạn chắc chắn muốn xoá phiếu chi này?")
                If result = DialogResult.Yes Then
                    'Xóa thông tin khóa ngoại trong bảng có liên quan
                    Dim mb As New MBuyingRate
                    mb.DeleteRecordHasPayment(txtID_PaymentVoucher.Text)
                    mPmV.DeleteRecord(txtID_PaymentVoucher.Text)
                    gridDetail.DataSource = Nothing
                    txtAmount.Text = 0
                    BindingDataToGrid()
                    EnableControls(False)

                    If grid.RowCount <= 0 Then
                        txtPMVNo.Text = ""
                        txtReceiver.Text = ""
                        txtTigia.Text = ""
                        txtCashier.Text = ""
                        txtDescription.Text = ""
                        txtAmount.Text = ""

                    End If

                End If
            Catch ex As Exception
                MessageBox.Show("Chưa chọn phiếu chi")
                Return
            End Try
            isApprove = False
        Else
            MessageBox.Show("You have not the right to delete this payment voucher")
            Return
        End If
    End Sub

    Private Sub chkExport_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkExport.CheckedChanged
        'If radFileFee.Checked = True Then
        'uti.FillAllFileForPaymentComboTree(cbTreeFileCase, chkExport.Checked)
        'cbTreeFileCase.Enabled = True
        uti.FillAllFileForPaymentTextbox(txtFile, chkExport.Checked)
        _isFileFee = True
        'Else
        'cbTreeFileCase.Enabled = False
        '_isFileFee = False
        'End If

    End Sub

    Private Sub txtTigia_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTigia.TextChanged
        uti.FormatCurr(txtTigia)
    End Sub

    Private Sub grid_DataBindingComplete(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles grid.DataBindingComplete

        If newOnePayment Then
        Else
            'uti.FillAllFileFinishPaymentComboTree(cbTreeFileCase, chkExport.Checked)
            uti.FillAllFileForPaymentTextbox(txtFile, chkExport.Checked)

            _loadedData = True
            If grid.RowCount > 0 Then
                FormatGrid()
            End If
        End If



    End Sub


 
    Private Sub cbTreeFileCase_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        ''Kiểm tra file đã chọn đã chi chưa

        'If _loadedData And (_isNew Or newOnePayment) Then
        '    Dim isPayment As Boolean = False
        '    Dim mbr As New MBuyingRate
        '    Try
        '        isPayment = mbr.IsPayment(cbTreeFileCase.SelectedValue)

        '    Catch ex As Exception
        '        gridDetail.DataSource = Nothing
        '        txtAmount.Text = 0
        '        Dim fileno As String = mfile.getFileNoFile2(cbTreeFileCase.SelectedValue)
        '        ' Chen so lieu ti gia vao banrg

        '        If chkExport.Checked = True Then
        '            txtDescription.Text = "Chi phí File " & fileno & "/EX"
        '        Else
        '            txtDescription.Text = "Chi phí File " & fileno & "/IM"
        '        End If

        '        Return
        '    End Try

        '    'If isPayment = True Then
        '    '    ErrorProvider1.SetError(cbTreeFileCase, "File hiện tại chưa có danh sách phí giá mua, chọn lại File khác")
        '    '    Return
        '    'End If

        '    'txtTigia.Text = mfile.GetRatioCurrency(cbTreeFileCase.SelectedValue)

        '    'If txtTigia.Text = "" Then
        '    '    MessageBox.Show("Nhập tỉ giá cho phiếu chi")
        '    '    Return
        '    'End If

        '    is_load_ratio_gridDetail = False
        '    'Load thông tin danh sách phí vào bảng chi tiết
        '    Dim query = mPmV.GetListFee(cbTreeFileCase.SelectedValue)
        '    gridDetail.DataSource = query

        '    If gridDetail.RowCount > 0 Then
        '        Dim fileno As String = mfile.getFileNoFile2(cbTreeFileCase.SelectedValue)
        '        ' Chen so lieu ti gia vao banrg




        '        If chkExport.Checked = True Then
        '            txtDescription.Text = "Chi phí File " & fileno & "/EX"
        '        Else
        '            txtDescription.Text = "Chi phí File " & fileno & "/IM"
        '        End If


        '        txtPMVNo.Focus()
        '        gridDetail.Columns(0).Visible = False
        '        gridDetail.Columns(1).Visible = False
        '        gridDetail.Columns(2).Visible = False
        '        gridDetail.Columns(5).Visible = False
        '        For index = 0 To gridDetail.RowCount - 1
        '            'Lay tien te xem co phai la VND khong
        '            Dim curr As Integer = gridDetail.Rows(index).Cells(5).Value

        '            If curr <> 1 Then
        '                'Neu khong phai tien viet
        '                'lay ti gia
        '                Dim mfex As New MFileExchange
        '                gridDetail.Rows(index).Cells(7).Value = mfex.GetRatioCurrency(cbTreeFileCase.SelectedValue, curr)
        '            End If

        '        Next
        '        is_load_ratio_gridDetail = True
        '        CalculateTotalBuying()
        '        'gridDetail.Columns(6).Visible = False
        '    Else

        '        'MessageBox.Show("Chưa tính phí của file này, chọn lại file khác")
        '        Return
        '    End If
        'End If

    End Sub


    Private Sub txtAmount_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtAmount.KeyPress
        e.Handled = False
    End Sub

    Private Sub btnRefresh_Click(sender As System.Object, e As System.EventArgs) Handles btnRefresh.Click
        BindingDataToGrid()
    End Sub


  
    Private Sub txtFile_Leave(sender As System.Object, e As System.EventArgs) Handles txtFile.Leave
        'Kiểm tra file đã chọn đã chi chưa
        If _isNew Then



            _idFile = mfile.getIDFile(txtFile.Text, chkExport.Checked)
            
            If _loadedData And (_isNew Or newOnePayment) Then
                Dim isPayment As Boolean = False
                Dim mbr As New MBuyingRate
                Try
                    isPayment = mbr.IsPayment(_idFile)

                Catch ex As Exception
                    gridDetail.DataSource = Nothing
                    txtAmount.Text = 0
                    Dim fileno As String = txtFile.Text
                    ' Chen so lieu ti gia vao banrg

                    If chkExport.Checked = True Then
                        txtDescription.Text = "Chi phí File " & fileno & "/EX"
                    Else
                        txtDescription.Text = "Chi phí File " & fileno & "/IM"
                    End If

                    Return
                End Try

                'If isPayment = True Then
                '    ErrorProvider1.SetError(cbTreeFileCase, "File hiện tại chưa có danh sách phí giá mua, chọn lại File khác")
                '    Return
                'End If

                'txtTigia.Text = mfile.GetRatioCurrency(cbTreeFileCase.SelectedValue)

                'If txtTigia.Text = "" Then
                '    MessageBox.Show("Nhập tỉ giá cho phiếu chi")
                '    Return
                'End If

                is_load_ratio_gridDetail = False
                'Load thông tin danh sách phí vào bảng chi tiết
                Dim query = mPmV.GetListFee(_idFile)
                gridDetail.DataSource = query

                If gridDetail.RowCount > 0 Then
                    Dim fileno As String = txtFile.Text
                    ' Chen so lieu ti gia vao banrg




                    If chkExport.Checked = True Then
                        txtDescription.Text = "Chi phí File " & fileno & "/EX"
                    Else
                        txtDescription.Text = "Chi phí File " & fileno & "/IM"
                    End If


                    txtPMVNo.Focus()
                    gridDetail.Columns(0).Visible = False
                    gridDetail.Columns(1).Visible = False
                    gridDetail.Columns(2).Visible = False
                    gridDetail.Columns(5).Visible = False
                    For index = 0 To gridDetail.RowCount - 1
                        'Lay tien te xem co phai la VND khong
                        Dim curr As Integer = gridDetail.Rows(index).Cells(5).Value

                        If curr <> 1 Then
                            'Neu khong phai tien viet
                            'lay ti gia
                            Dim mfex As New MFileExchange
                            gridDetail.Rows(index).Cells(7).Value = mfex.GetRatioCurrency(_idFile, curr)
                        End If

                    Next
                    is_load_ratio_gridDetail = True
                    CalculateTotalBuying()
                    'gridDetail.Columns(6).Visible = False
                Else

                    'MessageBox.Show("Chưa tính phí của file này, chọn lại file khác")
                    Return
                End If
            End If
        End If
    End Sub

    Private Sub txtFile_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles txtFile.KeyDown
        If Not (_isNew Or _isEdit) And e.KeyCode = Keys.Enter Then
            'Tim kiem 
            BindingDataToGridSearch(mfile.getIDFile(txtFile.Text, chkExport.Checked))
        End If
    End Sub

    Private Sub chkSearch_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkSearch.CheckedChanged
        If chkSearch.Checked = True Then
            txtFile.Enabled = True
            chkExport.Checked = True
        Else
            chkExport.Checked = False
            txtFile.Enabled = False
        End If

    End Sub

    
End Class